package com.transpot.service.impl.exception;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.transpot.entry.driver.Driver;
import com.transpot.entry.exception.Exception;
import com.transpot.entry.exception.ExceptionVO;
import com.transpot.entry.order.OrderBase;
import com.transpot.mapper.driver.DriverMapper;
import com.transpot.mapper.exception.ExceptionMapper;
import com.transpot.mapper.order.OrderBaseMapper;
import com.transpot.service.exception.ExceptionService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 订单异常实现类
 */
@Service
public class ExceptionServiceImpl extends ServiceImpl<ExceptionMapper, Exception> implements ExceptionService {
    @Autowired
    private ExceptionMapper exceptionMapper;
    @Autowired
    private DriverMapper driverMapper;
    @Autowired
    private OrderBaseMapper orderBaseMapper;
    /**
     * 获取全部未处理异常方法的实现
     * @param current
     * @param size
     * @return
     */
    @Override
    public Page<ExceptionVO> getAllException(int current, int size) {
        //创建分页查询对象
        Page<Exception> exceptionPage = new Page<>(current, size);
        //创建条件查询对象
        LambdaQueryWrapper<Exception> exceptionLambdaQueryWrapper = new LambdaQueryWrapper<>();
        //设置查询条件为异常状态未解决
        exceptionLambdaQueryWrapper.eq(Exception::getStatus, 0);
        //执行分页条件查询
        exceptionMapper.selectPage(exceptionPage, exceptionLambdaQueryWrapper);
        //创建一个返回结果对象列表用来存储所有拼装好的返回结果
        List<ExceptionVO> exceptionVOList = new ArrayList<>();
        //遍历所有返回结果
        for (int i = 0; i < exceptionPage.getRecords().size(); i ++) {
            //获得异常信息对象
            Exception exception = exceptionPage.getRecords().get(i);
            //得到司机主键
            Integer driverId = exception.getDriverId();
            //得到订单主键
            Integer orderBaseId = exception.getBaseId();
            //查询司机信息
            Driver driver = driverMapper.selectById(driverId);
            //查询订单信息
            OrderBase orderBase = orderBaseMapper.selectById(orderBaseId);
            //创建封装结果对象
            ExceptionVO exceptionVO = new ExceptionVO();
            //复制异常基本信息到返回结果对象中
            BeanUtils.copyProperties(exception, exceptionVO);
            //设置司机email
            exceptionVO.setEmail(driver.getEmail());
            //设置司机联系方式
            exceptionVO.setPhone(driver.getPhone());
            //设置司机姓名
            exceptionVO.setName(driver.getName());
            //设置订单标题
            exceptionVO.setShipperProjectName(orderBase.getShipperName());
            //把对象加入到列表中
            exceptionVOList.add(exceptionVO);
        }
        //创建新的分页对象
        Page<ExceptionVO> page = new Page<>(current, size);
        //把所有的返回结果信息传入
        page.setRecords(exceptionVOList);
        //设置上总的查询条目数
        page.setTotal(exceptionPage.getTotal());
        return page;
    }

    /**
     * 获取当前司机提交的全部异常
     * @param current
     * @param size
     * @param id
     * @return
     */
    @Override
    public Page<ExceptionVO> getExceptionByDriverId(int current, int size, Integer id) {
        //创建分页查询对象
        Page<Exception> exceptionPage = new Page<>(current, size);
        //创建条件查询对象
        LambdaQueryWrapper<Exception> exceptionLambdaQueryWrapper = new LambdaQueryWrapper<>();
        //设置查询条件为当前司机的主键
        exceptionLambdaQueryWrapper.eq(Exception::getDriverId, id);
        //执行分页条件查询
        exceptionMapper.selectPage(exceptionPage, exceptionLambdaQueryWrapper);
        //创建一个返回结果对象列表用来存储所有拼装好的返回结果
        List<ExceptionVO> exceptionVOList = new ArrayList<>();
        //遍历所有返回结果
        for (int i = 0; i < exceptionPage.getRecords().size(); i ++) {
            //获得异常信息对象
            Exception exception = exceptionPage.getRecords().get(i);
            //得到司机主键
            Integer driverId = exception.getDriverId();
            //得到订单主键
            Integer orderBaseId = exception.getBaseId();
            //查询司机信息
            Driver driver = driverMapper.selectById(driverId);
            //查询订单信息
            OrderBase orderBase = orderBaseMapper.selectById(orderBaseId);
            //创建封装结果对象
            ExceptionVO exceptionVO = new ExceptionVO();
            //复制异常基本信息到返回结果对象中
            BeanUtils.copyProperties(exception, exceptionVO);
            //设置司机email
            exceptionVO.setEmail(driver.getEmail());
            //设置司机联系方式
            exceptionVO.setPhone(driver.getPhone());
            //设置司机姓名
            exceptionVO.setName(driver.getName());
            //设置订单标题
            exceptionVO.setShipperProjectName(orderBase.getShipperName());
            //把对象加入到列表中
            exceptionVOList.add(exceptionVO);
        }
        //创建新的分页对象
        Page<ExceptionVO> page = new Page<>(current, size);
        //把所有的返回结果信息传入
        page.setRecords(exceptionVOList);
        //设置上总的查询条目数
        page.setTotal(exceptionPage.getTotal());
        return page;
    }
}
